main(List<String> args) {
  // 不推荐
  test((abc) {
    print(abc);
  });
  test1((num1, num2) {
    return num1 + num2;
  });
  test3((num1, num2) {
    return num1 + num2;
  });
  var demo123 = demo1();
  print(demo123(123, 35344));

// 创建一个函数 是 返回一个函数的 函数
  final demoRes = demo1();
// 调用一个 函数 接受 函数 去调用 函数
  test3(demoRes);
}

// 不推荐
void test(Function fn) {
  fn('abc');
}

// 定义回调函数传参
void test1(int fn(int num1, int num2)) {
  final res = fn(20, 30);
  print(res);
}

// 推荐
// 定义回调函数的函数 ( 理解为函数接口 )
typedef FnType = int Function(int num1, int num2);
void test3(FnType fn) {
  final res = fn(123, 13);
  print(res);
}

// 定义一个返回值函数
FnType demo1() {
  return (num1, num2) {
    return num1 + num2;
  };
}
